package schema

import "errors"

// EntranceEquipment 门禁设备数据类型 的相关信息定义
type EntranceEquipment struct {
	ID             int64    `json:"id" bson:"_id" structs:"id"`                                       // 唯一标识(自增ID)
	RecordID       string   `json:"record_id" bson:"record_id" structs:"record_id"`                   // 记录内码(uuid)
	EquipmentID    string   `json:"equipment_id" bson:"equipment_id" structs:"equipment_id"`          // 门禁设备id
	EquipmentName  string   `json:"equipment_name" bson:"equipment_name" structs:"equipment_name"`    // 门禁设备名称（通常以管控区域命名，区域层级以'-'连接）
	EquipmentType  string   `json:"equipment_type" bson:"equipment_type" structs:"equipment_type"`    // 门禁设备类型（例如：闸机、梯控 等）
	GuardZoneType  string   `json:"guard_zone_type" bson:"guard_zone_type" structs:"guard_zone_type"` // 管控区域类别 (例如：楼栋、单元、门牌)
	GuardZoneNodes []string `json:"guard_zone" bson:"guard_zone" structs:"guard_zone"`                // 管控区域（例如：汉峪/A/A1/8/1/11/01）
	Memo           string   `json:"memo" bson:"memo" structs:"memo"`                                  // 门禁设备相关的各种备注
	Creator        string   `json:"creator" bson:"creator" structs:"creator"`                         // 创建人
	Created        int64    `json:"created" bson:"created" structs:"created"`                         // 创建时间戳
	Deleted        int64    `json:"deleted" bson:"deleted" structs:"deleted"`                         // 删除时间戳
	GuardZoneName  string   `json:"guard_zone_name" bson:"guard_zone_name" structs:"guard_zone_name"` // 管控区域名称
}

// Validate 参数校验方法
func (a *EntranceEquipment) Validate() error {
	return nil
}

// RespResult 返回数据结构
type RespResult struct {
	Detail  *EntranceEquipment   `json:"detail"`
	Parents []*EntranceEquipment `json:"parents"`
}

// 设备类型
const (
	GateEquipmentType     = "闸机"
	StairsEquipmentType   = "梯控"
	EntranceEquipmentType = "门牌"
)

// EquipmentType 设备类型
type EquipmentType struct {
	EquipmentTypeString string `json:"equipment_type_string"`
}

// BuildingNode id对应子节点中的pId字段，title对应书中节点的名字
type BuildingNode struct {
	RecordID    string `json:"id" bson:"record_id" structs:"value"`
	Name        string `json:"title" bson:"name" structs:"title"`
	ParentID    string `json:"pId" bson:"parent_id" structs:"parent_id"`
	Value       string `json:"value" bson:"" structs:"value"`
	NodeType    int    `json:"node_type" bson:"type"`
	SalesStatus int    `json:"sales_status" bson:"sales_status" structs:"sales_status"` // 销售状态(10:物业自用 20:物业自持 30:已售 40:待售)
	LeaseStatus int    `json:"lease_status" bson:"lease_status" structs:"lease_status"` // 租赁状态(10:已出租 20:待出租)
}

// BuildingTreeNode 建筑节点树
type BuildingTreeNode struct {
	Name       string `json:"name" bson:"name"`
	RecordID   string `json:"record_id" bson:"record_id"`
	ParentNode string `json:"parent_node" bson:"parent_id"`
}

// GetEquipmentInfo 获取直连上级门禁设备信息 所用的结构体
type GetEquipmentInfo struct {
	ID                   int64    `json:"id" bson:"_id" structs:"id"`                                       // 唯一标识(自增ID)
	RecordID             string   `json:"key" bson:"record_id" structs:"record_id"`                         // 记录内码(uuid)
	EquipmentID          string   `json:"equipment_id" bson:"equipment_id" structs:"equipment_id"`          // 门禁设备id
	EquipmentName        string   `json:"equipment_name" bson:"equipment_name" structs:"equipment_name"`    // 门禁设备名称（通常以管控区域命名，区域层级以'-'连接）
	EquipmentType        string   `json:"equipment_type" bson:"equipment_type" structs:"equipment_type"`    // 门禁设备类型（例如：闸机、梯控 等）
	GuardZoneType        string   `json:"guard_zone_type" bson:"guard_zone_type" structs:"guard_zone_type"` // 管控区域类别 (例如：楼栋、单元、门牌)
	GuardZoneNodes       []string `json:"guard_zone" bson:"guard_zone" structs:"guard_zone"`                // 管控区域（例如：汉峪/A/A1/8/1/11/01）
	ParentEquipmentNodes []string `json:"parent_equipment_nodes" bson:"parent_equipment_nodes"`             //父设备节点
	Note                 string   `json:"note" bson:"note" structs:"note"`                                  // 门禁设备相关的各种备注
	Creator              string   `json:"creator" bson:"creator" structs:"creator"`                         // 创建人
	Created              int64    `json:"created" bson:"created" structs:"created"`                         // 创建时间戳
	Deleted              int64    `json:"deleted" bson:"deleted" structs:"deleted"`                         // 删除时间戳
	GuardZoneName        string   `json:"guard_zone_name" bson:"guard_zone_name" structs:"guard_zone_name"`
}

//
//## 1. 门禁设备管理(`oper_device`)
//
//| 字段             | 中文说明   | 字段类型 | 备注    |
//| ---------------- | ---------- | -------- | ------- |
//| \_id             | 唯一标识   | 数值     | 自增 ID |
//| record_id        | 记录内码   | 字符串   | uuid    |
//| device_id        | 设备 ID    | 字符串   |         |
//| device_name      | 设备名称   | 字符串   |         |
//| device_type      | 设备类型   | 字符串   | 字典项  |
//| control_category | 管控类别   | 字符串   | 字典项  |
//| park_id          | 管控区域   | 字符串   | 建筑 ID |
//| memo             | 备注       | 字符串   |         |
//| creator          | 创建人     | 字符串   |         |
//| created          | 创建时间戳 | 数值     |         |
//| deleted          | 删除时间戳 | 数值     |         |

type Device struct {
	ID              int64  `bson:"_id"`              //	唯一标识
	RecordID        string `bson:"record_id"`        //	记录内码
	DeviceID        string `bson:"device_id"`        //	设备ID
	DeviceName      string `bson:"device_name"`      //	设备名称
	DeviceType      string `bson:"device_type"`      //	设备类型
	ControlCategory string `bson:"control_category"` //	管控类别
	ParkID          string `bson:"park_id"`          //	管控区域
	Memo            string `bson:"memo"`             //	备注
	Creator         string `bson:"creator"`          //	创建人
	Created         int64  `bson:"created"`          //	创建时间戳
	Deleted         int64  `bson:"deleted"`          //	删除时间戳
}

type DeviceCParams struct {
	DeviceID        string `json:"device_id"`        //	设备ID
	DeviceName      string `json:"device_name"`      //	设备名称
	DeviceType      string `json:"device_type"`      //	设备类型
	ControlCategory string `json:"control_category"` //	管控类别
	ParkID          string `json:"park_id"`          //	管控区域
	Memo            string `json:"memo"`             //	备注
}

func (a *DeviceCParams) Validate() error {
	if a.DeviceID == "" || a.DeviceName == "" || a.DeviceType == "" || a.ControlCategory == "" || a.ParkID == "" {
		return errors.New("参数不能为空")
	}
	return nil
}
